#include "AbrirArchivo.cpp"
#include "Pruebas.cpp"



int main(int argc, char *argv[]){

	cout<<"***--------------------------------------------------------------***"<<endl;
	cout<<"			Comienzo PruebaLeerDirectorio		"<<endl;


	// en lexico almacenamos el lexico de todos los documentos de texto
	// en nuevoLexico se van agrupando los terminos a medida que se repiten en cada documento
	termino *lexico;
	terminoAgrupado *nuevoLexico;

	documento *idDocumentos;
	char nombre[50];
	const char *unNombre;
	int *cantDocumentos;
	int *cantTerminos, *termDistintos;
	char tecla;

	cantDocumentos = (int*)malloc(sizeof(int));
	cantTerminos = (int*)malloc(sizeof(int));
	termDistintos = (int*)malloc(sizeof(int));
	*termDistintos = 0;
	contarDocumentosDeDirectorio(argv[1],cantDocumentos);

	if (argc == 1){
	printf("Faltan argumentos.\n"); exit(-1);
	}

	//se reserva la memoria necesaria para almacenar todos los temrinos agrupados
	nuevoLexico = (terminoAgrupado*)malloc((*cantTerminos)*sizeof(terminoAgrupado));
	for (int k = 0; k<(*cantTerminos); k++){
		(*(nuevoLexico+k)).nombre = (char*)malloc(20*sizeof(char));
		(*(nuevoLexico+k)).posiciones = (int*)malloc(30*sizeof(int));
	}

	//se reserva la memoria necesaria para almacenar el id de los documentos
	idDocumentos = (documento*)malloc((*cantDocumentos)*sizeof(documento));
	for (int j = 0; j<(*cantDocumentos); j++){
		(*(idDocumentos+j)).nombre = (char*)malloc(25*sizeof(char));
		(*(idDocumentos+j)).directorio = (char*)malloc(50*sizeof(char));
	}

	leerDirectorio( argv[1], idDocumentos, cantDocumentos, cantTerminos);

	//se reserva la memoria necesaria para almacenar todos los temrinos
	lexico = (termino*)malloc((*cantTerminos)*sizeof(termino));
	for (int k = 0; k<(*cantTerminos); k++){
		(*(lexico+k)).nombre = (char*)malloc(20*sizeof(char));
	}

	leerArchivosDeDirectorio(lexico, idDocumentos, cantDocumentos);
	cout<<"LeerArchivosDeDirectorio OK!!!!!"<<endl;

	mergeSort(lexico, *cantTerminos);

	agruparPalabrasPorDocumento(lexico, nuevoLexico, *cantTerminos, termDistintos);

	cout<<"-----Fin de lectura de directorio-----"<<endl;
	cout<<"Cantidad de documentos leidos: "<<*cantDocumentos<<endl;
	cout<<"Cantidad de terminos leidos: "<<*cantTerminos<<endl;

	cout<<endl;
	cout<<"Cantidad de terminos leidos: "<<*cantTerminos<<endl;
	cout<<"Oprima una tecla para imprimir terminos ";
	cin>>tecla;

	/*for ( int j = 0; j < *cantTerminos ; j++ ){
			imprimirTermino(*(lexico+j));
		}*/

	/*for ( int j = 0; j < *termDistintos ; j++ ){
		imprimirTerminoAgrupado(*(nuevoLexico+j));
	}
	for (int m = 0 ; m<*cantDocumentos; m++){
		imprimirIDdocumentos(*(idDocumentos+m));
	}


	//libero memoria reservada
	for (int k = 0; k<*cantTerminos; k++){
			free((*(lexico+k)).nombre);
		}

	for (int j = 0; j<(*cantDocumentos); j++){
		free((*(idDocumentos+j)).nombre);
		free((*(idDocumentos+j)).directorio);
	}
	free(lexico);
	free(idDocumentos);
	free(cantDocumentos);
	free(cantTerminos);
	free(termDistintos);


	cout<<"DIRECTORIO LEIDO SATISFACTORIAMENTE"<<endl;




/*

	cout<<"***--------------------------------------------------------------***"<<endl;
	cout<<"			Comienzo PruebaLeerTermino		"<<endl;
	PruebaLeerTermino();

	cout<<"***--------------------------------------------------------------***"<<endl;
	cout<<"			Comienzo PruebaLeerArchivo		"<<endl;
	PruebaLeerArchivo();


	cout<<"***--------------------------------------------------------------***"<<endl;
	cout<<"			FIN DE LAS PRUEBAS!		"<<endl;
	cout<<"***--------------------------------------------------------------***"<<endl<<endl;
*/
	return 0;
}


